import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

    import java.util.*;
public class Main{
        public static void main(String[]args){
            Scanner sc=new Scanner(System.in);
            int n=sc.nextInt();
            int m=sc.nextInt();
            int []step=new int [m+1];//石板
            for(int i=0;i<m+1;i++){
                step[i]=Integer.MAX_VALUE;//因为要求最小步数，所以初始化最大值
            }
            step[n]=0;//base case,从n块石板跳到n块石板步数为0
            for(int i=n;i<m;i++){//i代表第i号石板
                if(step[i]==Integer.MAX_VALUE){//此时还是初始的默认值没有被更改过，证明无法跳到这个石板上
                    continue;
                }
                List<Integer> list=div(i);
                for(int j:list){//j代表一次可以跳几次石板
                    if(i+j<=m&&step[i+j]!=Integer.MAX_VALUE){
                        step[i+j]=Math.min(step[i+j],step[i]+1);//状态转移方程
                    }else if(i+j<=m){//step[i+j]==Integer.MAX_VALUE
                        step[i+j]=step[i]+1;
                    }
                }

            }
            if(step[m]==Integer.MAX_VALUE){//证明跳过了，没有跳到m石板上
                System.out.println(-1);
            }else{
                System.out.println(step[m]);
            }
        }
        //求约数
        public static List<Integer> div(int num){
            List<Integer> list=new ArrayList<>();
            for(int i=2;i*i<=num;i++){
                if(num%i==0){
                    list.add(i);//此时i是约数
                    if(num/i!=i){//保证放在list里的约数是不重复的
                        list.add(num/i);//num/i是另一个约束
                    }
                }
            }
            return list;
        }
    }




